#ifndef VEC4_H
#define VEC4_H

#include "GeoTool_global.h"

#include <math.h>
#include <stdio.h>

/*	@brief Store 4 float. Thoses float can be used for representing vertex position and
 *          use methods on it
 */

class GEOTOOLSHARED_EXPORT vec4
{
    /******************************************/
    /*          Public
    /******************************************/
    public :

        /******************************************/
        /*          Constructors
        /******************************************/

            vec4();
            vec4(float x);
            vec4(float x, float y);
            vec4(float x, float y, float z);
            vec4(float x, float y, float z, float w);

            vec4(float * aCoordinates, short aDimension);

            vec4(const vec4 &);	/*!<	Constructeur par recopie	*/

        /******************************************/
        /*          Methods
        /******************************************/

            float       Magnitude();       //  Return the vector magnitude (norme)



            vec4        Normalize();
            vec4        Inverse();
            float*      Array();
            void        Print();

        /******************************************/
        /*          Operators
        /******************************************/

            void        operator    +=  (const vec4 &);
            vec4        operator    +   (const vec4 &);

            vec4        operator    -   (const vec4 &);
            void        operator    -=  (const vec4 &);

            vec4 &      operator    =   (const vec4 &);

            vec4        operator    *   (const vec4 &);
            vec4        operator    *   (float val);        	//  Multiplication d'un vecteur et d'un nombre scalaire

            vec4        operator    /   (float val);           /*!< Division entre un vecteur et un nombre scalaire */


        /******************************************/
        /*          Properties
        /******************************************/

            float x,y,z,w;

        /******************************************/
        /*          Static  Methods
        /******************************************/

            static  vec4        Interpolate(vec4 v1, vec4 v2, float t);
            static  vec4        TurnAround(float teta, float alpha, float radius, vec4 point);

            static  float       Dot(vec4 u, vec4 v);        //  Produit scalaire
            static  vec4        Cross(vec4 u, vec4 v);      //  Produit Vectoriel

        /******************************************/
        /*          Static  Properties
        /******************************************/

            static  vec4    Forward;
            static  vec4    Zero;
            static  vec4    Up;
            static  vec4    Right;

    /******************************************/
    /*          Private
    /******************************************/




};
#endif // VEC4_H
